/**
 一、js应用程序上下文
 二、js执行环境和内存结构
 三、js作用域和作用域链 
    3.1、作用域：
        概念：
           作用域表示的是一个变量的可用范围、其实它是一个保存变量的对象
        特点：   
        （1）作用域环境中访问变量的权利是由内向外的，
            内部作用域可以获得当前作用域下的变量并且可以获得当前包含当前作用域的外层作用域下的变量，反之则不能。
        （2）外层作用域下无法获取内层作用域下的变量，同样在不同的函数作用域中也是不能相互访问彼此变量的.
        （3）函数内部也有限权访问另一个函数内部的变量该怎么办呢？
            闭包就是用来解决这一需求的，闭包的本质就是在一个函数内部创建另一个函数
    
    3.2、作用域分类：
        - 全局：
        - 局部作用域：
         2、函数作用域
            （2.1）临时创建的活动对象AO（Activation Object）、该对象包含了函数的所有局部变量、命名参数、参数集合以及this。
                   当运行时上下文被销毁、活动也会被销毁（闭包形成的原因其实因为就是因为活动对象被引用着无法被销毁而导致的）
                优点：不污染全局
                缺点：不可重复使用、仅在函数内可以使用
 四、js词法分析和语法分析
 五、js程序执行几个阶段
        第一阶段：在内存中创建执行执行环境栈、把全局对象window压入栈底、在window中声明变量。
        第二阶段：函数调用时，
                 执行环境中添加当前函数调用、
                 为本次函数调用创建活动对象AO、
                 根据scope指定运行期活动对象AO的上下文内部对象
        第三阶段：函数调用后
                 数调用从执行环境栈中出栈、函数作用域AO释放、函数作用域AO中的局部变量也一同被释放。         
 */